#

| Chapter 38 Starting, Stopping, and Killing Processes |

## 38.17 Automatically Kill Background Processes on Logout in csh

In many versions of the Bourne shell, background processes (1.26) are automatically killed with a HANGUP signal (signal 1) on logout. But the C shell makes background processes immune to signals and a HANGUP signal at logout doesn't affect the processes; they keep running.

If you want the C shell to work like the Bourne shell, put lines like these in your .logout file (3.1):

    /tmp

    ! -z

    -v

    eval
    set tf=/tmp/k$$
    jobs >$tf
    if (! -z $tf) then      # there are jobs
        jobs >$tf.1         # rerun it to dump `Done' jobs
                            # skip Stopped jobs (killed by default)
        grep -v Stopped <$tf.1 >$tf; rm $tf.1
                            # cannot use a pipe here
        if (! -z $tf) then  # there are running jobs
            eval `echo kill -1; sed 's/.\([0-9]*\).*/%\1/' <$tf`
        endif
    endif
    rm $tf

Warning: this may run afoul of various csh quirks (47.2). [To watch this work, put `set` `verbose` `echo` (8.17) at the top of your .logout file. If the logout process clears your screen or closes the window, you can give yourself `n` seconds to read the debugging output by adding `sleep` `n` (40.2) to the end of your .logout file. -JP ] The important trick is to run `jobs >file`, not `jobs | command`, as the latter runs jobs in a subshell (38.4) and thus produces no output, although `jobs` `|` `any-csh-builtin` is good for a laugh `:-)`.

- CT in comp.unix.questions on Usenet, 5 August 1989

38.16 Why You Can't Kill a Zombie |  | 38.18 nohup